package cn.net.Thread;//测试多线程的创建方式1
/**本类用来测试多线程的编程方式1
 * extends Thread
 *
 * 区别
 * 多个run():只是一个普通方法执行即单线程顺序执行,并没有多线程编程的效果
 * 多个start()方法:/**对应的状态就是就绪状态,想要使用多线程启动干活,必须调用start()才是真正的启动线程
 *线程的随机性:CPU会自动调度可运行状态的线程们,但是哪个时间片执行哪个线程我们无法控制。执行结果不可控
 */
public class TestThread1 {
    public static void main(String[] args) {
        //4.无参构造
        MyThread t = new MyThread();//create class MyThread
        MyThread t2 = new MyThread();//create class MyThread
        MyThread t3 = new MyThread();//create class MyThread
        //t.run();//打印一次：0=Thread-0  ~~ 9=Thread-0
        t.start();//启动线程：0=Thread-0  ~~ 9=Thread-0
        //启动多线程
//        t2.start();
//        t3.start();

            //5，含参构造
        MyThread t4 = new MyThread("小灰灰");
        t4.start();
    }
}
//1.【自定义】多线程类+继承Thread线程+重写run()方法
/**1.方式1:extends Thread*/
class MyThread extends Thread{
        //2.无参 +有参

    public MyThread() {
        super();
    }

    public MyThread(String name) {
        super(name);
    }

    //3.重写Thread父类中的run()方法
    @Override
    public void run() {
        //super.run();/**4.super表示父类对象的引用,默认使用Thread类的业务,不用*/
        //3.写业务:输出10次当前正在执行的线程名称
        for (int i = 0; i < 10; i++) {
            /**5.getName()获取正在执行任务的线程名称,是从父类中继承的方法,可以直接使用*/
            System.out.println(i+"="+getName());//0=Thread-0  ~~ 9=Thread-0
        }

    }
}
